// pages/upload/upload.js
import { photoService } from '../../services/photo'
import { auth } from '../../utils/auth'

Page({

    /**
     * 页面的初始数据
     */
    data: {
        tempFilePath: '',  // 临时文件路径
        uploading: false   // 是否正在上传
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        // 检查登录状态
        if (!auth.checkLogin()) return
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    },

    // 选择图片
    chooseImage() {
        wx.chooseImage({
            count: 1,
            sizeType: ['original'], // 使用原图
            sourceType: ['album', 'camera'],
            success: async (res) => {
                const tempFilePath = res.tempFilePaths[0]
                
                try {
                    // 获取图片信息
                    const imageInfo = await wx.getImageInfo({
                        src: tempFilePath
                    })

                    // 获取 canvas 上下文
                    const query = wx.createSelectorQuery()
                    query.select('#imageCanvas')
                        .fields({ node: true, size: true })
                        .exec((res) => {
                            const canvas = res[0].node
                            const ctx = canvas.getContext('2d')

                            // 计算压缩后的尺寸（只压缩尺寸，不压缩质量）
                            let targetWidth = imageInfo.width
                            let targetHeight = imageInfo.height

                            // 限制最大尺寸为1920px（为了显示效果）
                            if (targetWidth > 1920 || targetHeight > 1920) {
                                const ratio = Math.min(1920 / targetWidth, 1920 / targetHeight)
                                targetWidth = Math.floor(targetWidth * ratio)
                                targetHeight = Math.floor(targetHeight * ratio)
                            }

                            // 设置canvas尺寸
                            canvas.width = targetWidth
                            canvas.height = targetHeight

                            // 创建图片对象
                            const img = canvas.createImage()
                            img.onload = () => {
                                // 清空画布
                                ctx.clearRect(0, 0, targetWidth, targetHeight)
                                // 绘制图片
                                ctx.drawImage(img, 0, 0, targetWidth, targetHeight)
                                
                                // 导出图片（使用最高质量）
                                wx.canvasToTempFilePath({
                                    canvas: canvas,
                                    quality: 1.0, // 使用最高质量
                                    success: (res) => {
                                        this.setData({
                                            tempFilePath: res.tempFilePath
                                        })
                                    },
                                    fail: (error) => {
                                        console.error('处理图片失败:', error)
                                        // 如果处理失败，使用原图
                                        this.setData({
                                            tempFilePath: tempFilePath
                                        })
                                    }
                                })
                            }
                            img.src = tempFilePath
                        })
                } catch (error) {
                    console.error('处理图片失败:', error)
                    // 出错时使用原图
                    this.setData({
                        tempFilePath: tempFilePath
                    })
                }
            }
        })
    },

    // 处理上传
    handleUpload() {
        if (!this.data.tempFilePath || this.data.uploading) return
        
        this.setData({ uploading: true })

        // 获取token
        const token = wx.getStorageSync('token')
        if (!token) {
            wx.showToast({
                title: '请先登录',
                icon: 'none'
            })
            return
        }

        // 使用 photoService 上传
        photoService.uploadPhoto({
            filePath: this.data.tempFilePath,
            name: 'file'
        }).then(() => {
            wx.showToast({
                title: '上传成功',
                icon: 'success',
                duration: 1500,
                success: () => {
                    // 清空临时文件路径
                    this.setData({ tempFilePath: '' })
                    
                    // 延迟跳转，让用户看到成功提示
                    setTimeout(() => {
                        // 返回首页
                        wx.switchTab({
                            url: '/pages/index/index',
                            success: () => {
                                // 获取首页实例并刷新数据
                                const pages = getCurrentPages();
                                const indexPage = pages[0];
                                if (indexPage) {
                                    indexPage.refreshPhotos();
                                }
                            }
                        })
                    }, 1500)
                }
            })
        }).catch(error => {
            console.error('上传失败:', error)
            wx.showToast({
                title: error.message || '上传失败，请重试',
                icon: 'none'
            })
        }).finally(() => {
            this.setData({ uploading: false })
        })
    }
})